/***
 * 把需要做校验的页面的表单项，以及这些表单项的类型及尺寸，用数组的形式先定义好。
 * 这个函数式必须出现在需做校验的页面中的，这里只是说明用法。
 * 具体描述：
 * this.a?---- 固定写法，其中?从1开始顺序编号（主要是为了唯一）。
 * 表单项名---- 对应页面中的form中表单项的名字，一定要一致。
 * 类型------- 必须指明要校验的表单项的类型，目前只支持以下几种（必须按下面的类型书写）
 *				String 字符串类型
 *				Number 数字类型，包括浮点和整数
 *				Date   日期类型 目前定死格式yyyy-MM-dd
 *				Time   时间类型 目前定死格式HH:ss
 *				Email  email类型
 * 可空------- true表示允许为空，false表示不能为空。
 * “长度”和“格式”随着类型的不同，其代表的含义也不同，详细信息见下表：
 * ╔---------------------------------------------------------------------------------------------------------╗
 * ┆       ┆   String			┆    Number			┆   Date			┆   Time			┆   Email		 ┆
 * ┆--------------------------------------------------------------------------------------------------------┆
 * ┆长度	┆    长度上限		┆  总长				┆没有使用（定死的）	┆	没有使用（定死的）	┆ 长度上限       ┆
 * ┆--------------------------------------------------------------------------------------------------------┆
 * ┆格式	┆	"",不做校验		┆scale(0表示整数)	┆没有使用（定死的）	┆	没有使用（定死的）	┆没有使用(定死的) ┆
 * ┆		┆	按正则表达式校验	┆(>0表示浮点数)		┆					┆					┆				 ┆
 * ╚---------------------------------------------------------------------------------------------------------╝
 * 错误头-----  如果校验有错误，为了给用户一个清楚的描述，必须提供是谁错了。错误头即指明：谁 出错了。
 *				应该与页面上表单项前中文名字一致。
 * size长度---  可空。如果为"",程序将自动按照“长度”值设置input标签的size属性；如果有具体值，则按照该值设置input标签的size属性。
 *              日期和时间由于目前是定死的，所以不会受“长度”值和“size长度”值的影响。
 * 下限-------  下限可空。如果是String或Email类型，表示字符串的下限串；如果是Number类型，表示数字的下限值；如果是Date或Time类型，表示日期的下限值（可以是"yyyy-MM-dd HH:mm"或"yyyy-MM-dd"或"HH:mm"）
 * 上限-------  上限可空。如果是String或Email类型，表示字符串的上限串；如果是Number类型，表示数字的上限值；如果是Date或Time类型，表示日期的上限值（可以是"yyyy-MM-dd HH:mm"或"yyyy-MM-dd"或"HH:mm"）

 * 举例说明：
 * function fieldArray () { 
 * 说明  定式				错误头		表单项名      类型		可空		长度		格式  size长度  下限	上限
 *	this.a1 = new Array("部门名称：","dpname",	"String",	"true",	"20",	"",		"",);
 *	this.a3 = new Array("工作延续：","worklg",	"Number",	"false","5",	"2",	"",		"",		"");//number(5,2)
 *	this.a4 = new Array("工作延续：","worklg2",	"Number",	"false","3",	"0",	"");//整数
 *	this.a5 = new Array("工作延续：","date",		"Date",		"false","",		"",		"");
 *	this.a6 = new Array("工作延续：","time",		"Time",		"false","",		"",		"");
 *	this.a7 = new Array("工作延续：","email",		"Email",	"false","",		"",		"");
 *
 * } 
 * <
 *  <script language="javascript">
 *		//document.editGroup.noused[0].checked=true;
 *		setLimit(editGroup);
 *	</script>
 */

//-----------------------------------------MaskInput-------------------------------------
/**
 * 输入屏蔽，只允许输入strMask字符集中的字符。
 * @param field input对象
 * @param event 事件
 * @param srtMask 允许输入字符类型集合
 * 使用举例：onkeypress="return MaskInput( this, event, "0123456789")"
 */
function MaskInput( field, event, strMask){
	var key, keychar;

	if( window.event){
		key= window.event.keyCode;
	}
	else if( event){
		key= event.which;
	}
	else{
		return true;
	}

	keychar= String.fromCharCode( key);
	//屏蔽特殊键
	if(( key== null)||( key== 0)||( key== 8)||
	   ( key== 9)||( key== 13)||( key== 27)){
		return true;
	}
	else if(( strMask.indexOf( keychar)> -1)){
		window.status="";
		return true;
	}
	else{
		window.status="只能输入"+strMask;
		return false;
	}
}

//-----------------------------------------mask-------------------------------------
/**
 * 只允许按照一定的格式填写
 * @param field input对象
 * @param loc 小时，分钟位数
 * @param delim 时间格式
 * 举例说明： onkeyup="mask( this, '2,2', ':')"
 */
function mask(field,loc,delim){
	var str= field.value;
	var locs = loc.split(',');
	//alert(locs);
	for (var i = 0; i <= locs.length; i++){
		for (var k = 0; k <= str.length; k++){
			if (k == locs[i]){
				if (str.substring(k, k+1) != delim){
					str = str.substring(0,k) + delim + str.substring(k,str.length);
				}
			}
		}
	}
	field.value = str;
}

//-----------------------------------------isValidDate-------------------------------------
/**
 * 判断日期中（月、日）是否超出范围
 * @param day 日
 * @param month 月
 * @param year 年
 * @return boolean
 */
function isValidDate(day, month, year) {
	if (month < 1 || month > 12) {
		return false;
	}
	if (day < 1 || day > 31) {
		return false;
	}
	if ((month == 4 || month == 6 || month == 9 || month == 11) &&
		(day == 31)) {
		return false;
	}
	if (month == 2) {
		var leap = (year % 4 == 0 &&
				   (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day == 29 && !leap)) {
			return false;
		}
	}
	return true;
}

//-----------------------------------------isValidTime-------------------------------------
/**
 * 判断时间是否超出范围
 * @param hour 小时
 * @param minute 分钟
 * @return boolean
 */
function isValidTime(hour,minute) {
	if (hour<0 || hour>23){return false;}
	if (minute<0 || minute>59){return false;}
	return true;
}

//-----------------------------------------checkEmail-------------------------------------
/**
 * 判断email是否合法
 * @param emailStr 需要判断的字符串
 * @return boolean
 */
function checkEmail(emailStr) {
   if (emailStr.length == 0) {
	   return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
	   return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
	   return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
	   for (var i = 1; i <= 4; i++) {
		  if (IPArray[i] > 255) {
			 return false;
		  }
	   }
	   return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
	   return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
	   (domArr[domArr.length-1].length > 3)) {
	   return false;
   }
   if (len < 2) {
	   return false;
   }
   return true;
}

//-----------------------------------------numberFormat-------------------------------------
/**
 * 获得Number格式
 * @param iLen Number的长度
 * @param iFormat Number的精度
 * @return Number的格式
 */
function numberFormat(iLen,iFormat){
	var msg="";
	if (iFormat>0){
		for (var k=0;k<(iLen-iFormat);k++){
			msg+="d";
		}
		msg+=".";
		for (var k=0;k<iFormat;k++){
			msg+="d";
		}
	}else{
		for (var k=0;k<iLen;k++){
			msg+="d";
		}
	}
	return msg;
}

//-----------------------------------------RegexpInput-------------------------------------
/**
 * 输入屏蔽，只允许输入strMask字符集中的字符。
 * @param field input对象
 * @param event 事件
 * @param expPattern 允许输入字符类型集合
 * @param msg 提示信息
 * @return boolean
 */
function RegexpInput( field, event, expPattern,msg){
	var key, keychar;

	if( window.event){
		key= window.event.keyCode;
	}
	else if( event){
		key= event.which;
	}
	else{
		return true;
	}

	keychar= String.fromCharCode( key);

	var hopeStr=field.value+""+keychar;
	//屏蔽特殊键
	if(( key== null)||( key== 0)||( key== 8)||
	   ( key== 9)||( key== 13)||( key== 27)){
		return true;
	}
	else if(expPattern.test(hopeStr)){
		return true;
	}
	else{
		window.status="只能输入"+msg;
		return false;
	}
}

//-----------------------------------------validateString-------------------------------------
/**
 * String类型验证
 * @param value 表单对象值
 * @param len 字符串的限定长度
 * @param format 正则表达式（如果为空或null就不进行正则验证）
 * @return massage验证信息
 */
function validateString(value,len,format){
	var message="";
	var iLen = parseInt(len);
	if (format!=null){
		if (format.length>0){
			stringRegexp = new RegExp(format);
			if (!stringRegexp.test(value)){
				message="格式不符合要求（"+format+"）。";
			}
		}
	}
	if (iLen>0&&value.length>iLen){message="超长。";}
	return message;
}
//-----------------------------------------validateNumber-------------------------------------
/**
 * Number类型验证
 * @param value 表单对象值
 * @param len Number的限定长度
 * @param format 精度
 * @return massage验证信息
 */
function validateNumber(field,len,format){
	var message="";
	if(field.length>0 && 
			(field[0].type=="text"||field[0].type=="textarea"||
			 field[0].type=="file"||field[0].type=="password")){
		//alert("validateNumber+++");
		for(var k=0;k<field.length;k++){
			//alert("validateNumber"+field[k].value);
			if (field[k].value!=""){
				message=validateOneNumber(field[k].value,len,format);
				if (message.length>0){
					break;
				}
			}
		}
		
	}else{
		message=validateOneNumber(field.value,len,format);
	}

	
	return message;
}

function validateOneNumber(value,len,format){
	var message="";
	var iLen = parseInt(len);
	var iFormat = parseInt(format);
	if (iFormat>0){
		numberRegexp = new RegExp("^[-+]?(\\d{1,"+(iLen-iFormat)+"}(\\.\\d{0,"+iFormat+"})?)?$");
	}else{
		numberRegexp = new RegExp("^[-+]?(\\d{1,"+iLen+"})$");
	}
	if (!numberRegexp.test(value)){
		if (iFormat>0){
			message="浮点数格式不正确。格式为："+numberFormat(iLen,iFormat);
		}else{
			message="整数格式不正确。格式为："+numberFormat(iLen,iFormat);
		}
	}
	return message;
}

//-----------------------------------------validateDate-------------------------------------
/**
 * 日期中（年、月、日）类型验证
 * @param value 表单对象值
 * @param len 日期长度
 * @param format
 * @return message验证信息
 */
function validateDate(value,len,format){
	var message="";
	dateRegexp = new RegExp("^(\\d{4})[-](\\d{2})[-](\\d{2})$");
	var matched = dateRegexp.exec(value);
	if(matched != null) {
		 if (!isValidDate(matched[3], matched[2], matched[1])) {
			 message="日期格式不正确。格式为：年-月-日。例如：1980-07-01";
		 }
	} else {
		 message="日期格式不正确。格式为：年-月-日。例如：1980-07-01";
	}
	return message;
}

//-----------------------------------------validateDateTime-------------------------------------
/**
 * 日期中（年、月、日）类型验证
 * @param value 表单对象值
 * @param len 日期长度
 * @param format
 * @return message验证信息
 */
function validateDateTime(value,len,format){
	var message="";
	dateRegexp = new RegExp("^(\\d{4})[-](\\d{2})[-](\\d{2})[ ](\\d{2})[:](\\d{2})$");
	var matched = dateRegexp.exec(value);
	if(matched != null) {
		 if (!isValidDate(matched[3], matched[2], matched[1])) {
			 message="日期格式不正确。格式为：年-月-日。例如：1980-07-01 13:01";
		 }
	} else {
		 message="日期格式不正确。格式为：年-月-日。例如：1980-07-01 13:01";
	}
	return message;
}


//-----------------------------------------validateTime-------------------------------------
/**
 * 时间类型验证
 * @param value 表单对象值
 * @param len 日期长度
 * @param format
 * @return message验证信息
 */
function validateTime(value,len,format){
	var message="";
	timeRegexp = new RegExp("^(\\d{2})[:](\\d{2})$");
	var matched = timeRegexp.exec(value);
	if(matched != null) {
		 if (!isValidTime( matched[1], matched[2])) {
			 message="时间格式不正确。格式为：时:分。例如：13:10";
		 }
	} else {
		message="时间格式不正确。格式为：时:分。例如：13:10";
	}
	return message;
}

function validateCalendarTime(value,len,format){
	var message="";
	timeRegexp = new RegExp("^(\\d{2})(\\d{2})$");
	var matched = timeRegexp.exec(value);
	if(matched != null) {
		 if (!isValidTime( matched[1], matched[2])) {
			 message="时间格式不正确。格式为：时分。例如：1301";
		 }
	} else {
		message="时间格式不正确。格式为：时分。例如：1301";
	}
	return message;
}

//-----------------------------------------validateEmail-------------------------------------
/**
 * Email类型验证
 * @param value 表单对象值
 * @param len
 * @param format
 * @return message验证信息
 */
function validateEmail(value,len,format){
	var message="";
	var iLen = parseInt(len);
	//var emailRegexp = /^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$)*$/;
	if (!checkEmail(value)){
		message="email格式不正确。格式为：用户名@地址。例如：foxgem.hu@chinacodeline.com";
	}
	if (iLen>0&&value.length>iLen){
		message="超长。";
	}
	return message;
}

//-----------------------------------------numberLimit-------------------------------------
function numberLimit(field,iFormat,iLen,iFsize){
	if (iFormat>0){
		//alert("[-+]?(\\d{1,"+(iLen-iFormat)+"}(\\.\\d{0,"+iFormat+"})?)?");
		var msg="浮点数，格式为："+numberFormat(iLen,iFormat);
		if (iLen>0&&iLen>iFormat){
			var float_pattern="/^[-+]?(\\d{1,"+(iLen-iFormat)+"}(\\.\\d{0,"+iFormat+"})?)?$/";
			field.maxlength=(iLen+1);
			field.onkeypress=new Function("return RegexpInput( this, event, "+float_pattern+",'"+msg+"')&&this.value.length<this.maxlength;");
		}else{
			var float_pattern="/^[-+]?([0](\\.\\d{0,"+iFormat+"})?)?$/";
			field.maxlength=(iFormat+2);
			field.onkeypress=new Function("return RegexpInput( this, event, "+float_pattern+",'"+msg+"')&&this.value.length<this.maxlength;");
		}
		
	}else{
		if (iLen>0){
			field.maxlength=iLen;
			field.onkeypress=new Function("return  MaskInput( this, event, '0123456789')&&this.value.length<this.maxlength;");
		}else{
			field.onkeypress=new Function("return  MaskInput( this, event, '0123456789');");
		}
	}
	if (iFsize>0){
		field.size=iFsize;
	}else{
		if (iLen>0){
			field.size=field.maxlength;
		} else {
			if (iFormat>0){
				field.size=field.maxlength;
			}					
		}
	}

}

//====================================setLimit===================================
/**
 * 表单输入限制
 * @param form form表单名称
 */
function setLimit(form){
	//var isValid = true;
	//var focusField = null;
	//var i = 0;
	//var fields = new Array();
	oArray = new fieldArray();
	for (x in oArray) {// 对field数组中的每一个field做输入限制设置
		 var msg = oArray[x][0];
		 var field = form[oArray[x][1]];
		 var ftype = oArray[x][2];
		 //isnull = oArray[x][3];
		 var len = oArray[x][4];
		 var format = oArray[x][5];
		 
		 var fsize = oArray[x][6];
	
		 var iLen = 0;
		 if (len != null){
			iLen = parseInt(len);
		 }
		 var iFormat = 0;
		 if (format!=null){
			 iFormat =parseInt(format);
		 } 
		 var iFsize = 0;
		 if (fsize!=null){
			 iFsize = parseInt(fsize); 
		 }
		 
		 if (field==null)
		 {
			 alert("所配置的前台校验信息field数目大于实际field数目\n（或者有field名称配置错误）");
		 }else{
		   
			 if (ftype=="String"){
				if (field.type == 'text' ||
					field.type == 'file' ||
					field.type == 'textarea' ||
					field.type == 'password') {
					if (iLen>0){
						field.maxlength=len;
						field.onkeypress=new Function("return this.value.length<this.maxlength;");
					}
					if (iFsize>0){
						field.size=iFsize;
					}else{
						if (iLen>0){
							field.size=field.maxlength;
						}
					}
				}
				
			 }else if (ftype=="Number"){
				if (field.type == 'text'){
					numberLimit(field,iFormat,iLen,iFsize);
				}
				if (field.length>0&&field[0].type=='text')
				{
					for (var k=0;k<field.length ;k++ )
					{
						numberLimit(field[k],iFormat,iLen,iFsize);
					}
				}
			 }else if (ftype=="Date"){
				 if(field.type=='text'){
					field.maxlength=10;
					field.size=field.maxlength;
					field.onkeypress=new Function("return  MaskInput( this, event, '0123456789')&&this.value.length<this.maxlength;");
					field.onkeyup=new Function("mask(this, '4,7', '-')");
				 }
			 }else if (ftype=="Time"){
				 if (field.type=='text'){
					field.maxlength=5;
					field.size=field.maxlength;
					field.onkeypress=new Function("return  MaskInput( this, event, '0123456789')&&this.value.length<this.maxlength;");
					field.onkeyup=new Function("mask(this, '2', ':')");
				 }
			 }else if (ftype=="DateTime"){
				 if (field.type=='text'){
					field.maxlength=16;
					field.size=field.maxlength;
					field.readonly=true;
					//field.onkeypress=new Function("return  MaskInput( this, event, '0123456789')&&this.value.length<this.maxlength;");
					//field.onkeyup=new Function("mask(this, '2', ':')");
				 }
			 }else if (ftype=="Email"){
				if (field.type=='text'){
					if (iLen>0){
						field.maxlength=len;
						field.onkeypress=new Function("return this.value.length<this.maxlength;");
					}
					
				 }
			 } 
		 }
						
	}//for 对field数组中的每一个field做输入限制设置
}

//-----------------------------------------getFieldValue-------------------------------------
/**
 * 循环取得radio或checkbox被选中的值
 * @param field 表单对象
 * @return value
 */
function getOneOfFieldArrayValue(field,type){
	var value='';
	for (var j=0; j< field.length; j++){
		//alert("getOneOfFieldArrayValue:"+field[j].value+";"+field[j].name+";"+field.length);
		
		if ((type=="radio"||type=="checkbox")){
			if (field[j].checked)
			{
				value=field[j].value;
				break;
			}
		}else if (type=="text"||type=="textarea"||
				  type=="file"||type=="password"){
			//alert("getFieldValue:"+field[j].value+";"+field[j].name+";"+field.length);
			if (field[j].value==""){
				value="";
				break;
			}else {
				value=field[j].value;
			}			
		}
	}
	return value;
}

/**
 * 判断radio或checkbox是否被选中
 * @param field
 * @return value
 */
function getFieldValue(field){
	var value='';
	if(field.length>0 && 
		(field[0].type=="radio"||field[0].type=="checkbox"||
		 field[0].type=="text"||field[0].type=="textarea"||
		 field[0].type=="file"||field[0].type=="password")){
		value= getOneOfFieldArrayValue(field,field[0].type);
	} else if (field.type == "select-one") {
		var si = field.selectedIndex;
		if (si >= 0) {
			value = field.options[si].value;
		} 
	}else{
		value = field.value;
	}
	//alert("{"+value+"}");
	return value;
}

//-----------------------------------------printErrorMessages-------------------------------------
/**
 * 获得错误信息集合并使用alert打印出来，定位第一个错误信息处
 * @param field 表单对象
 * @param errorMessageArray 错误信息集合
 * @param focusField 第一个出错信息的表单
 */
function printErrorMessages(errorMessageArray,focusField){
	//alert("hahaha");
	if (errorMessageArray.length > 0) {
		if (//如果是以下类型，定位到第一个出现错误的field
			focusField.type == 'text' ||
			focusField.type == 'textarea' ||
			focusField.type == 'file' ||
			focusField.type == 'select-one' ||
			focusField.type == 'radio' ||
			focusField.type == 'checkbox' ||
			focusField.type == 'password') {
			focusField.focus();
		}
		alert(errorMessageArray.join("\n"));
	}
}


//-----------------------------------------stringRange-------------------------------------
function stringRange(str,min,max){
	var msg="";
	if (min!=null){
		if (min.length>0){
			if (str.length<min.length){
				isValid=false;
			}else if (str.length==min.length){
				if (str<min){
					msg+="下限："+min+"。";
				}
			}
		}
	}
	if (max!=null){
		if (max.length>0){
			if (str.length>max.length){
				isValid=false;
			}else if (str.length==max.length){
				if (str>max){
					msg+="上限："+max+"。";
				}
			}
		}
	}
	return (msg.length>0)?("字符串超出范围！"+msg):msg;
}

//-----------------------------------------numberRange-------------------------------------
function numberRange(field,min,max) {
	var msg="";
	if (field.length>0)
	{
		for(var i=0;i<field.length;i++){
			msg=oneNumberRange(field[i].value,min,max);
			if (msg.length>0){
				break;
			}
		}
	}else{
		msg=oneNumberRange(field.value,min,max);
	}
	return msg;
}

function oneNumberRange(value,min,max) {
	var msg="";
	var fValue = parseFloat(value);
	if (min!=null){
		if (min.length>0){
			var fMin = parseFloat(min);
			if (fValue<fMin){
				msg+="下限："+min+"。";
			}
		}
	}
	if (max!=null){
		if (max.length>0){
			var fMax = parseFloat(max);
			if (fValue>fMax){
				msg+="上限："+max+"。";
			}
		}
	}
	return (msg.length>0)?("数字超出范围！"+msg):msg;
}


//-----------------------------------------convertDate-------------------------------------
function convertDate(str){
	//var indate="1980-01-30 02:01";
	var dateValue=null;
	var indate=str;
	var dateRegexp = new RegExp("^(\\d{4})[-](\\d{2})[-](\\d{2})$");
	var timeRegexp = new RegExp("^(\\d{2})[:](\\d{2})$");
	var datetimeRegexp = new RegExp("^(\\d{4})[-](\\d{2})[-](\\d{2})[ ](\\d{2})[:](\\d{2})$");
	var datematched = dateRegexp.exec(indate);
	var timematched = timeRegexp.exec(indate);
	var datetimematched = datetimeRegexp.exec(indate);
	if(datematched != null) {
		dateValue=new Date(datematched[1],datematched[2]-1,datematched[3]);
		//alert(dateValue);
	}
	if(timematched != null) {
		var curDate=new Date();
		var dateValue=new Date(curDate.getYear(),curDate.getMonth(),curDate.getDate(),timematched[1],timematched[2]);
		//alert(dateValue);
	}
	if(datetimematched != null) {
		var dateValue=new Date(datetimematched[1],datetimematched[2]-1,datetimematched[3],datetimematched[4],datetimematched[5],0);
		//alert(dateValue);
	}
	return dateValue;
}

//-----------------------------------------datetimeRange-------------------------------------
function datetimeRange(str,min,max){
	var msg="";
	var dateValue=convertDate(str);
	if (min!=null){
		if (min.length>0){
			var dateMin = convertDate(min);
			if (dateMin!=null){
				if(dateValue<dateMin){
					msg+="下限："+min+"。";
				}
			}
		}
	}
	if (max!=null){
		if (max.length>0){
			var dateMax = convertDate(max);
			if (dateMax!=null){
				if(dateValue>dateMax){
					msg+="上限："+max+"。";
				}
			}
		}
	}
	return (msg.length>0)?("日期时间超出范围！"+msg):msg;
}

//========================================validate======================================
/**
 * 提交验证
 * @param form form表单名称
 * @spanid
 * @return boolean
 */
function validate(form,spanid) { 
	 lockSubmit(true);
	 var isValid = true;
	 var focusField = null;
	 var i = 0;
	 var fields = new Array();
	 var oArray = new fieldArray();//获得field数组
	 for (var x in oArray) {//对field数组中的每一个field做验证
		 var curValid = true;
		 var msg = oArray[x][0];
		 var field = form[oArray[x][1]];
		 var ftype = oArray[x][2];
		 isnull = oArray[x][3];
		 var len = oArray[x][4];
		 var format = oArray[x][5];
		 
		 var min = oArray[x][7];
		 var max = oArray[x][8];

		 if (field==null)
		 {
			 alert("所配置的前台校验信息field数目大于实际field数目\n（或者有field名称配置错误）");
			 return false;
		 }
		 
		 if (field.length>0 ||
			field.type == 'text' ||
			field.type == 'textarea' ||
			field.type == 'file' ||
			field.type == 'select-one' ||
			field.type == 'radio' ||
			field.type == 'checkbox' ||
			field.type == 'password') {
			
			var value = '';
			// 获得radio或checkbox是否被选中
			value= getFieldValue(field);
			if (value == ''&& isnull=="false" ) {
				if (isnull=="false" ){
					fields[i] = oArray[x][0]+"为空。";
					isValid = false;
					curValid = false;
				}
			}else if (value!=''||field.length>0){//if value==''
				var message="";
				 if (ftype=="String"){
					  message=validateString(value,len,format);
					  if (message.length==0){
						  message=stringRange(value,min,max);
					  }
				 }else if (ftype=="Number"){
					message=validateNumber(field,len,format);
					if (message.length==0){
						message=numberRange(field,min,max);
					}
				 }else if (ftype=="Date"){
					  message=validateDate(value,len,format);
					  if (message.length==0){
						  message=datetimeRange(value,min,max);
					  }
				 }else if (ftype=="Time"){
					  message=validateTime(value,len,format);
					  if (message.length==0){
						  message=datetimeRange(value,min,max);
					  }
				 }else if (ftype=="DateTime"){
					  message=validateDateTime(value,len,format);
					  if (message.length==0){
						  message=datetimeRange(value,min,max);
					  }
				 }else if (ftype=="Email"){
					  message=validateEmail(value,len,format);
					  if (message.length==0){
						  message=stringRange(value,min,max);
					  }
				 }
				 if (message.length>0){
					 fields[i] = oArray[x][0]+message;
					 isValid = false;
					 curValid = false;
				 }
			}
		}//if
		 
		if (!curValid) {
			if (i==0){
				focusField = field;
			}
			i++;
		}
	 }//for 对field数组中的每一个field做验证
     
	 //alert("fields.length"+fields.length+":"+fields+":isValid"+isValid);
     //如果有错误，显示错误。这里用alert显示。
	 printErrorMessages(fields,focusField);
	 if( !isValid){
		 //alert("hihi");
		 lockSubmit(false);
	 }
	 return isValid;
}


function validate2(){
	lockSubmit(true);
	return true;
}

function lockSubmit(isTrue){
	for(i = 0; i < document.all.length; i++){
		if(document.all(i).type == "submit"){
			document.all(i).disabled=isTrue;
		}
	   //alert(document.all(i).type);
	}
}
/**
function lockSubmit(form){
	var doc = eval('document.' + form);
	for( var i=0; i<doc.elements.length; i++){
		if (doc.elements[i].type=="submit" ){
			doc.elements[i].disabled= true;
	}
}
*/